[IA64] Bind event channels of VT-i domain to vcpu 0
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 3 Oct 2006 03:27:49 +0000 (21:27 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 3 Oct 2006 03:27:49 +0000 (21:27 -0600)
Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@jp.fujitsu.com>
xen/arch/ia64/vmx/vmx_process.c

index 71c41cca33ae0ca5daf1fdd48b3f6171c11f98c8..b1b9667444b0dfa1130a060ce209b8608e5bd6ca 100644 (file)
@@ -198,7 +198,7 @@ void leave_hypervisor_tail(struct pt_regs *regs)
 {
     struct domain *d = current->domain;
     struct vcpu *v = current;
-    int callback_irq;
+
     // FIXME: Will this work properly if doing an RFI???
     if (!is_idle_domain(d) ) { // always comes from guest
 //        struct pt_regs *user_regs = vcpu_regs(current);
@@ -226,11 +226,14 @@ void leave_hypervisor_tail(struct pt_regs *regs)
 //           v->arch.irq_new_pending = 1;
 //       }
 
-        callback_irq = d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ];
-        if (callback_irq != 0 && local_events_need_delivery()) {
-            /*inject para-device call back irq*/
-            v->vcpu_info->evtchn_upcall_mask = 1;
-            vmx_vcpu_pend_interrupt(v, callback_irq);
+        if (v->vcpu_id == 0) {
+            int callback_irq =
+                d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ];
+            if (callback_irq != 0 && local_events_need_delivery()) {
+                /*inject para-device call back irq*/
+                v->vcpu_info->evtchn_upcall_mask = 1;
+                vmx_vcpu_pend_interrupt(v, callback_irq);
+            }
         }
 
         if ( v->arch.irq_new_pending ) {